home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 101 / CD-ROM 101.iso / compl / maya5ple / Install_MayaPLE5_English.exe / Maya / Data1.cab / listUnselected.mel < prev    next >
Encoding:
Text File  |  2003-07-17  |  3.6 KB  |  133 lines

  1. // Copyright (C) 1997-2002 Alias|Wavefront,
  2. // a division of Silicon Graphics Limited.
  3. //
  4. // The information in this file is provided for the exclusive use of the
  5. // licensees of Alias|Wavefront.  Such users have the right to use, modify,
  6. // and incorporate this code into other products for purposes authorized
  7. // by the Alias|Wavefront license agreement, without fee.
  8. //
  9. // ALIAS|WAVEFRONT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  10. // INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
  11. // EVENT SHALL ALIAS|WAVEFRONT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  12. // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  13. // DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  14. // TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  15. // PERFORMANCE OF THIS SOFTWARE.
  16. //
  17. //
  18. // Alias|Wavefront Script File
  19. // MODIFY THIS AT YOUR OWN RISK
  20. // Creation Date:  November 22, 1997
  21. //
  22. //<doc>
  23. //<name listUnselected>
  24. //<owner "Alias|Wavefront Unsupported">
  25. //
  26. //<synopsis>
  27. //    string[] listUnselected()
  28. //
  29. //<description>
  30. //        Lists the top transform for all DAG objects that are not selected.
  31. //
  32. //<flags>
  33. //        None.
  34. //
  35. //<returns>
  36. //      string[]: Array of transform nodes names.
  37. //
  38. //<examples>
  39. //      sphere; cone; group; select -d;
  40. //      listUnselected;
  41. //      // Result: persp top front side nurbsSphere1 group1 //
  42. //
  43. //</doc>
  44. //
  45. global proc string[] listUnselected ()
  46. {
  47.     string $selected[] = `ls -sl -type dagNode`;
  48.     int    $selectedCount = size($selected);
  49.     string $assemblies[]  = `ls -as`;
  50.  
  51.     if ($selectedCount == 0) {
  52.         return $assemblies;
  53.     } else {
  54.         string    $item;
  55.         string    $result[];
  56.         string  $selectedAbove[];
  57.     
  58.         //    Expand selected to include objects above the selected items
  59.         //
  60.         string  $selectedAbove[] = $selected;
  61.         $parents = `listRelatives -p -pa $selected`;
  62.         while (size($parents) > 0) {
  63.             for ($item in $parents) {
  64.                 $selectedAbove[size($selectedAbove)] = $item;
  65.             }
  66.             $parents = `listRelatives -p -pa $parents`;
  67.         }
  68.         $selected = sort($selected);
  69.         $selectedAbove = sort($selectedAbove);
  70.         int $selectedCount = size($selected);
  71.         int $selectedAboveCount = size($selectedAbove);
  72.  
  73.         //    Process assemblies
  74.         //
  75.         int        $i, $j, $cmp;
  76.         string    $leftOvers[];
  77.         int        $leftOverCount;
  78.         int        $assemblyCount = size($assemblies);
  79.  
  80.         do {
  81.             $assemblies = sort($assemblies);
  82.  
  83.             //    Step 1: process objects not on selectedAbove list
  84.             //
  85.             $i = 0; $j = 0;
  86.             while ($i < $assemblyCount && $j < $selectedAboveCount) {
  87.                 $cmp = strcmp($assemblies[$i], $selectedAbove[$j]);
  88.                 if ($cmp < 0) {
  89.                     $result[size($result)] = $assemblies[$i];
  90.                     ++$i;
  91.                 } else if ($cmp > 0) {
  92.                     ++$j;
  93.                 } else {
  94.                     $leftOvers[size($leftOvers)] = $assemblies[$i];
  95.                     ++$i; ++$j;
  96.                 }
  97.             }
  98.             while ($i < $assemblyCount) {
  99.                 $result[size($result)] = $assemblies[$i];
  100.                 ++$i;
  101.             }
  102.  
  103.             //    Step 2: weed out active leftovers
  104.             //
  105.             $i = 0; $j = 0;
  106.             clear($assemblies);
  107.             $leftOverCount = size($leftOvers);
  108.             while ($i < $leftOverCount && $j < $selectedCount) {
  109.                 $cmp = strcmp($leftOvers[$i], $selected[$j]);
  110.                 if ($cmp < 0) {
  111.                     $assemblies[size($assemblies)] = $leftOvers[$i];
  112.                     ++$i;
  113.                 } else if ($cmp > 0) {
  114.                     ++$j;
  115.                 } else {
  116.                     ++$i; ++$j;
  117.                 }
  118.             }
  119.             while ($i < $leftOverCount) {
  120.                 $assemblies[size($assemblies)] = $leftOvers[$i];
  121.                 ++$i;
  122.             }
  123.             clear($leftOvers);
  124.  
  125.             //    Process children of leftovers recursively...
  126.             //
  127.             $assemblies = `listRelatives -c -pa $assemblies`;
  128.             $assemblyCount = size($assemblies);
  129.         } while ($assemblyCount > 0);
  130.         return $result;
  131.     }
  132. }
  133.